package xkp.lesson2;

public class Test2 {
    public static void main(String[] args) {
        byte[] arr = new byte[1024];//1kb
        //int n = 10/0;

        //使用线程三种方式
        //1、使用Thread类，继承Thread类，重写run方法
        MyThread myThread1 = new MyThread();
        MyThread myThread2 = new MyThread();
        Thread myThread3 = new MyThread();
        myThread3.start();
        //通过start方法，启动线程
        //此处调用start方法不代表线程立马运行
        //start方法只是把该线程加入到操作系统的任务队列中
        //当被操作系统的任务调度机制调度到后才执行
        myThread1.start();
        myThread2.start();

        //注意：如果使用线程对象调用run方法，则此时run方法相当于对象的普通方法。此处就没有创建线程，依然在原有线程中
        //myThread.run();

       /* System.out.println("欢迎使用线程"+":"+Thread.currentThread().getName());
        System.out.println("欢迎使用线程"+":"+Thread.currentThread().getName());
        System.out.println("欢迎使用线程"+":"+Thread.currentThread().getName());
        System.out.println("欢迎使用线程"+":"+Thread.currentThread().getName());
        System.out.println("欢迎使用线程"+":"+Thread.currentThread().getName());*/

        for(int i =1; i <= 10; i++){
            //Thread.currentThread()当前线程
            System.out.println(i+":"+Thread.currentThread().getName());
            //希望线程执行慢一点 可以使线程休眠
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        //通过打印结构发现：线程的执行顺序基本上每一个都不一致，在宏观上看是随机的
        //线程的执行有由操作系统决定的。
        //不用刻意强求线程的执行顺序:

    }


}

//线程相当于进程中的一个子任务
//我们总要知道这个线程要干什么事情
class MyThread extends Thread{
    @Override
    public void run() {
        for(int i =1; i <= 10; i++){
            //Thread.currentThread()当前线程
            System.out.println(i+":"+Thread.currentThread().getName());
            //希望线程执行慢一点 可以使线程休眠
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
